﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using l1cs.server.server.types;
using l1cs.server.model;

namespace l1cs.server.serverpackets
{
    public class S_EffectLocation : ServerBasePacket
    {
        private byte[] _byte = null;

        /**
         * 指定された位置へエフェクトを表示するパケットを構築する。
         * 
         * @param pt - エフェクトを表示する位置を格納したPointオブジェクト
         * @param gfxId - 表示するエフェクトのID
         */
        public S_EffectLocation( Point pt, int gfxId )
            : this( pt.getX(), pt.getY(), gfxId )
        {
        }

        /**
         * 指定された位置へエフェクトを表示するパケットを構築する。
         * 
         * @param loc - エフェクトを表示する位置を格納したL1Locationオブジェクト
         * @param gfxId - 表示するエフェクトのID
         */
        public S_EffectLocation( L1Location loc, int gfxId )
            : this( loc.getX(), loc.getY(), gfxId )
        {
        }

        /**
         * 指定された位置へエフェクトを表示するパケットを構築する。
         * 
         * @param x - エフェクトを表示する位置のX座標
         * @param y - エフェクトを表示する位置のY座標
         * @param gfxId - 表示するエフェクトのID
         */
        public S_EffectLocation( int x, int y, int gfxId )
        {
            writeC( Opcodes.S_OPCODE_EFFECTLOCATION );
            writeH( x );
            writeH( y );
            writeH( gfxId );
            writeC( 0 );
        }

        override
        public byte[] getContent()
        {
            if ( _byte == null )
            {
                _byte = getBytes();
            }

            return _byte;
        }

        override public String getType()
        {
            return "[S] S_EffectLocation";
        }
    }
}
